package com.ljx.stateMode.after;

import lombok.Data;

/**
 * 状态模式（使用状态模式后的代码），（简单案例）
 *
 * @作者 LJX
 * @日期 2022/12/26 10:23
 */
public class StateTestAfterSimple {

    public static void main(String[] args) {

        //新建用户
        User user = new User();
        //设置用户等级
        user.changeLevel(User.NORMAL);
        //调用模拟面试方法
        user.simulateInterview();
        //购买Plus会员
        user.changeLevel(User.PLUS);
        //再次调用模拟面试方法
        user.simulateInterview();
    }

}

/**
 * 抽象用户接口
 */
interface IUser{

    //模拟面试方法
    void simulateInterview();

}

/**
 *用户状态切换接口
 */
interface ISwitchState{
    /**
     * 改变用户等级
     */
    void changeLevel(IUser iUser);

}

/**
 * 普通用户类
 */
class Normal implements IUser{

    @Override
    public void simulateInterview() {
        System.out.println("普通用户无权使用模拟面试功能！！！");
    }
}

/**
 * plus用户
 */
class Plus implements IUser{

    @Override
    public void simulateInterview() {
        System.out.println("开始模拟面试。。。");
    }
}

/**
 * 用户类
 */
class User implements IUser, ISwitchState{

    //定义用户级别
    public final static Normal NORMAL = new Normal();
    public final static Plus PLUS = new Plus();

    IUser iUser;

    @Override
    public void simulateInterview() {
        iUser.simulateInterview();
    }

    @Override
    public void changeLevel(IUser iUser) {
        this.iUser = iUser;
    }
}